package com.ai.module.chat.util.aliyun;

import com.ai.module.chat.config.advice.exception.BusinessException;
import com.ai.module.chat.config.properties.AliyunProperty;
import com.ai.module.chat.util.SpringUtils;
import com.ai.module.mj.constant.stringConstant.ReturnCode;
import com.alibaba.fastjson2.JSONObject;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import lombok.extern.slf4j.Slf4j;

/**
 * @author: heJinQin
 * @create: 2024-03-12 23:29
 * @description:
 **/
@Slf4j
public class MessageCodeUtil {

    public static AliyunProperty aliyunProperty =  SpringUtils.getClazz(AliyunProperty.class);


    public static Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露，并威胁账号下所有资源的安全性。以下代码示例仅供参考，建议使用更安全的 STS 方式，更多鉴权访问方式请参见：https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(aliyunProperty.getAccessKeyId())
                // 必填，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(aliyunProperty.getAccessKeySecret());
        // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new Client(config);
    }

    public static void SendMessageCode(Integer code,String phoneNumber) {
         try {
             JSONObject codeJson = new JSONObject();
             codeJson.put("code",code);
             Client client =  createClient();
             SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
                     .setSignName("深圳市远智未来软件技术")
                     .setTemplateCode("SMS_465411913")
                     .setPhoneNumbers(phoneNumber)
                     .setTemplateParam(codeJson.toString());
             com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();

             // 复制代码运行请自行打印 API 的返回值
             SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);
             log.info("阿里云短信返回[{}]",JSONObject.toJSONString(sendSmsResponse));
         } catch (Exception error) {
            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
            // 错误 message
           error.printStackTrace();
           log.error("阿里云发送短信失败[{}]",error.getMessage());
           throw new BusinessException("阿里云发送短信失败", ReturnCode.FAILURE);
        }
    }
}
